В гите есть 2 репозитория:
- https://git.gosuslugi.local/pgs2-rtlabs/source/mz-service/-/tree/dev (ветка dev!) - здесь хранится "ядро" сервиса, т.е. основная бизнес-логика работы в инфраструктуре ПГС - отправка моков и информации о сервеси при старте, обработка ошибок и получение и остылка сообщений в нужные топики. А также, дефолтная имплементация сервиса - это простое преобразование из формата XML СМЭВ по XSD схеме в обычный json или xml без атрибутов
- https://git.gosuslugi.local/pgs2-rtlabs/source/mz-xsd-storage.git (ветка master) - здесь хранится кастомизация сервисов, а также XSD схемы, моки и настройки для каждого из вида услуг. Каждая папка в данном репозитории - это дополнительные исходники для сервиса.
Важно! Для корректной работы на локальном компьютере необходимо установить gradle и git последних версий
Как использовать mz-service
На примере написания нового сервиса mvd-passport-validity:
- Клонируем репозиторий https://git.gosuslugi.local/pgs2-rtlabs/source/mz-service/-/tree/dev
- Задаём имя сервиса, который нам требуется (либо новый, либо тот, который хотим отредактировать) одним из 3-х способов
- задать переменную окружения MZ_SERVICE_NAME с названием сервиса (название сервиса совпадает с названием папки в mz-xsd-storage)
- задать системную переменную MZ_SERVICE_NAME - т.е. запускать gradle таски с параметром -DMZ_SERVICE_NAME=<имя_сервиса>
- третий
вариант - это прописать название сервиса в build.gradle примерно в
25-ой строчке:, т.е. это дефолтное значение, если не указана переменная
окружения или системная переменная (только не нужно коммитить это
)
- Далее подготавливаем сервис. Для этого запускаем в gradle таску prepareService. Что происходит при запуске:
- gradle использует Git для подключения исходников из второго репозитория https://git.gosuslugi.local/pgs2-rtlabs/source/mz-xsd-storage.git. Но делает это максимально быстро: подгружается не весь репозиторий, а только нужная папка
- исходники из второго репозитория положатся в папку mz-xsd/mvd-passport-validity
- Синхронизируйте проект IDEA с Gradle. После этого директории и mvd-passport-validity подключатся как дополнительный source-set:
- Далее
создаём струтктуру каталогов и нужные файлы конфигурации для сервиса по
номеру версии протокола (для нашего примера mvd-passport-validity,
версия протокола 1.3.0) (Важно! В качестве разделителя в
номере версии выбрана нижняя черта. это связано с техническими
ограничениями библиотек, поэтому каталог для версии 1.3.0 будет
называться 1_3_0 ). В каждом каталогее версии должны присутствовать следующие каталоги:
- api - здесь хранятся примеры запросов и ответов, а также сгенерированные json-схемы для формата запросов и ответов - сюда класть ничего не нужно, эта директория и файлы в ней создаются автоматически
- schema - файлы схемы. Важно! Осень рекомендуется переименовывать корневой файл xsd в schema.xsd, чтобы избежать фрагментации в настройках и не заморачиваться на окнфигах (файл shema.xsd ищется по умолчанию)
- mock - всё, что связано с моками. В случае с mvd-passport-validity на тех. портале было 3 примера запросов и ответов. Так же, лежит файл mock.yml по формату точно такой же как и был:
- файл binding.xml - файл, вкотором описываются некоторые правила для генерации классов из XSD (например, кастомные адаптеры, неймспейсы и имена классов для конкретных типов и элементов - для решения конфликтов имён). Формат всегда можно посмотреть в интернете, либо в уже готовых сервисах.
- Создаём файл application-prod.yml - это файл настроек Micronaut с профайлом prod.
В этом файле можно переопределять любые настройки сервиса. Кроме того,
описываются специфические значения для конкретного сервиса:
app:
# название сервиса (без префикса mz-)
service-name: mvd-passport-validity
info:
# вид сведеиний
name: Проверка действительности Паспорта Гражданина РФ по серии и номеру
provider:
# код провадера сведений
code: mvd
# полное название провайдера
name: Министерство внутренних дел Российской Федерации
# сокращенное название провайдера
short-name: МВД
versions:
# настройки по номерам версий. Важно! используйте в качестве разделителя символ - (минус)
1-3-0:
# ссылка на тех портал
link: https://lkuv.gosuslugi.ru/paip-portal/#/inquiries/797df91e-0ec0-4fe5-852a-9f2afa6ebdfb/versions/0eb70e26-3688-4667-9520-6d0a0e3d70ca?area=PROD
# неймспейс - тоже берётся с тех портала
namespace: urn://mvd/guvm/passport-validity/1.3.0
request-to-smev:
# Название корневого тега запроса (по-уолчанию ищется сгененрированный класс с таким названием)
clazz: PassportValidityRequest
# Название сгененрированного класса. Требуется проствлять, если оно не совпадает со значением хедера
jaxb-class-name: GeneratedRequest
# Название класса, если у вас отличается формат от сгененрированного класса в PassportValidityRequest
mapped-class-name: MyRequest
response-from-smev:
# Название корневого тега ответа
clazz: PassportValidityResponse
# Название сгененрированного класса. Требуется проствлять, если оно не совпадает со значением хедера
jaxb-class-name: GeneratedResponse
# Название класса, если у вас отличается формат от сгененрированного класса в PassportValidityResponse
mapped-class-name: MyResponse - После того, как мы заполним папку с настройками, запускаем генерацию java-классов по XSD модели (в gradle таск jaxb). У нас добавятся в classpath сгенерированные файлы:
- Создаём интерфейс ApiController, по которому сгенерируется swagger-файл. В нём указываем 2 класса - класс запроса и класс ответа: В качестве тэга ставим версию с префксом v. В путь ставим тоже версию протокола
Для простых сервисов - это всё. Сервис готов и можно пробовать его запускать локально. При локальном запуске у вас сгенерируются примеры запросов и ответов в папке api
Подключение S3, Postgres, Arango, Redis
Для подключения дополнительных библиотек создай в mz-xsd-storage в пакете с сервисом файл service.gradle и добавить в нём ключ serviceWithS3 = true (для работы с S3) или serviceWithPostgres=true (для работы с Postgres):
Как работать с S3 можно посмотреть на примере сервиса fns-bfoinn.
В build.gradle можно посмотреть дополнительные ключи для работы с redis, arango, httpclient и другие.








Добавить комментарий